﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Follow.Business;
using System.Windows.Forms;
namespace Follow.Cadastros
{
    public partial class Cliente : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["idUsuario"] == null)
            {
                Response.Redirect("../Default.aspx");
            }
            else
            {
                Common.ValidaPermissoes valida = new Common.ValidaPermissoes();
                bool possuiPermissao = valida.validaPermissaoPorTela("Cliente", Convert.ToInt32(Session["idGrupoUsuario"]));

                if (possuiPermissao == false)
                {
                    Response.Redirect("../permissaoNegada.aspx");
                }

                if (Request["Msg"] != null)
                {
                    divMsg1.Visible = true;
                    divMsg1.Attributes["class"] = "isa_info";
                    lblMsg1.Text = Request["Msg"].ToString();

                }
                this.PopulaClientesByName();
            }
        }

        private void PopulaClientes()
        {
            lblMsgGridClientes.Visible = false;
            ClienteBO bo = new ClienteBO();
            gvClientes.DataSource = bo.findAll();
            gvClientes.DataBind();
            if (gvClientes.Rows.Count == 0)
                lblMsgGridClientes.Visible = true;
        }

        private void PopulaContatos(Int32 id)
        {
            divContatos.Visible = true;
            lblMsgGridContatos.Visible = false;
            ContatoBO bo = new ContatoBO();
            gvContatos.DataSource = bo.findByCliente(id);
            gvContatos.DataBind();
            if (gvContatos.Rows.Count == 0)
                lblMsgGridContatos.Visible = true;
        }

        private void PopulaClientesByName()
        {
            lblMsgGridClientes.Visible = false;
            ClienteBO bo = new ClienteBO();
            gvClientes.DataSource = bo.findByName(txtPesquisa.Text, ckbPesquisa.Checked);
            gvClientes.DataBind();
            if (gvClientes.Rows.Count == 0)
                lblMsgGridClientes.Visible = true;
        }

        private void PopulaUsuarios()
        {
            UsuarioBO boUsuario = new UsuarioBO();
            GrupoBO boGrupo = new GrupoBO();
            ddlUsuario.DataSource = boUsuario.findByGrupo(boGrupo.findIdClientes());
            ddlUsuario.DataValueField = "idusuario";
            ddlUsuario.DataTextField = "nome";
            ddlUsuario.DataBind();
            ddlUsuario.Items.Insert(0, new ListItem("Selecione...", "0"));
        }

        protected void btnPesquisa_Click(object sender, EventArgs e)
        {
            this.PopulaClientesByName();
        }

        private void LimparCamposView2()
        {
            lblTituloView2.Text = "Inserir cliente";
            divMsg2.Visible = false;
            lblMsg2.Text = "Mensagem.";
            IDCliente.Value = "";
            txtNome.Text = "";
            txtCnpj.Text = "";
            txtCidade.Text = "";
            txtEstado.Text = "";
            ckbAtivo.Checked = true;

        }

        private void LimparCamposView3()
        {
            lblTituloView2.Text = "Inserir contato";
            divMsg3.Visible = false;
            lblMsg3.Text = "Mensagem.";
            IDContato.Value = "";
            IDClienteContato.Value = "";
            txtNomeContato.Text = "";
            txtDepto.Text = "";
            txtEmail.Text = "";
            txtTel1.Text = "";
            txtTel2.Text = "";
            ddlUsuario.DataSource = null;
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            LimparCamposView2();
            lblTituloView2.Text = "Incluir novo cliente";
            gvContatos.DataSource = null;
            gvContatos.DataBind();
            divContatos.Visible = false;
            mvClientes.ActiveViewIndex = 1;
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                Model.Cliente c = new Model.Cliente();
                ClienteBO bo = new ClienteBO();
                if (IDCliente.Value != "")
                {
                    c.IDCliente = Int32.Parse(IDCliente.Value);
                }
                c.Nome = txtNome.Text;
                c.CNPJ = txtCnpj.Text;
                c.Cidade = txtCidade.Text;
                c.Estado = txtEstado.Text;
                c.Ativo = (ckbAtivo.Checked == true) ? true : false;

                Common.ValidarCPFCNPJ validador = new Common.ValidarCPFCNPJ();
                if (validador.IsCnpj(c.CNPJ))
                {
                    bo.save(c, Convert.ToInt32(Session["idUsuario"]));
                    mvClientes.ActiveViewIndex = 0;
                    this.PopulaClientes();
                    divMsg1.Visible = true;
                    divMsg1.Attributes["class"] = "isa_success";
                    lblMsg1.Text = "Cliente salvo com sucesso!";
  
                }
                else
                {
                    divMsg2.Visible = true;
                    divMsg2.Attributes["class"] = "isa_error";
                    lblMsg2.Text = "CNPJ inválido";
                }            
            }
            catch (Exception ex)
            {
                divMsg2.Visible = true;
                divMsg2.Attributes["class"] = "isa_error";
                if (ex.Message.IndexOf("duplicate") > -1)
                {
                    lblMsg2.Text = "Cliente já cadastrado no sistema";
                }
                else
                {
                    lblMsg2.Text = ex.Message;
                }
            }
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            mvClientes.ActiveViewIndex = 0;
        }

        protected void gvClientes_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Editar"))
            {
                Int32 id = Convert.ToInt32(this.gvClientes.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);

                if (id != null)
                {
                    if (id > 0)
                    {
                        ClienteBO bo = new ClienteBO();
                        Model.Cliente c = bo.load(id);
                        txtNome.Text = c.Nome;
                        txtCnpj.Text = Convert.ToString(c.CNPJ);
                        txtCidade.Text = c.Cidade;
                        txtEstado.Text = c.Estado;
                        ckbAtivo.Checked = (c.Ativo == true) ? true : false;
                        IDCliente.Value = c.IDCliente.ToString();
                        PopulaContatos(c.IDCliente);
                        mvClientes.ActiveViewIndex = 1;
                        divMsg2.Visible = false;
                        lblMsg2.Text = "";                        
                    }
                }
            }

            else if (e.CommandName.Equals("Excluir"))
            {
                if (System.Windows.Forms.MessageBox.Show("Tem certeza que deseja excluir?", "Excluir", MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) ==
                    System.Windows.Forms.DialogResult.OK)
                {
                    Int32 id = 0;
                    try
                    {
                        id = Convert.ToInt32(this.gvClientes.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    }
                    catch
                    {
                        return;
                    }
                    ClienteBO bo = new ClienteBO();
                    try
                    {

                        bo.delete(id, Convert.ToInt32(Session["idUsuario"]));
                        divMsg1.Visible = true;
                        divMsg1.Attributes["class"] = "isa_success";
                        lblMsg1.Text = "Cliente excluído com sucesso!";
                        PopulaClientes();
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Visible = true;
                        divMsg1.Attributes["class"] = "isa_error";
                        lblMsg1.Text = "Erro ao excluir: " + ex.Message;
                    }
                }
            }

            else if (e.CommandName.Equals("Contatos"))
            {
                Int32 id = Convert.ToInt32(this.gvClientes.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                if (id != null)
                {
                    if (id > 0)
                    {
                        ClienteBO bo = new ClienteBO();
                        Model.Cliente c = bo.load(id);
                        txtNome.Text = c.Nome;
                        txtCnpj.Text = Convert.ToString(c.CNPJ);
                        txtCidade.Text = c.Cidade;
                        txtEstado.Text = c.Estado;
                        ckbAtivo.Checked = (c.Ativo == true) ? true : false;
                        IDCliente.Value = c.IDCliente.ToString();
                        mvClientes.ActiveViewIndex = 1;
                        divMsg2.Visible = false;
                        lblMsg2.Text = "";
                        PopulaContatos(c.IDCliente);
                    }
                }
            }
        }

        protected void btnSalvarContato_Click(object sender, EventArgs e)
        {
            try
            {
                Model.Contato contato = new Model.Contato();
                ContatoBO bo = new ContatoBO();
                if (IDContato.Value != "")
                {
                    contato.IDContato = Int32.Parse(IDContato.Value);

                }
                contato.IDCliente = Int32.Parse(IDClienteContato.Value);
                contato.Nome = txtNomeContato.Text;
                contato.Dpto = txtDepto.Text;
                contato.Email = txtEmail.Text;
                contato.Tel1 = txtTel1.Text;
                contato.Tel2 = txtTel2.Text;
                contato.IDUsuario = (ddlUsuario.SelectedValue == "0") ? Int32.MinValue : Convert.ToInt32(ddlUsuario.SelectedValue);
                bo.save(contato, Convert.ToInt32(Session["idUsuario"]));
                divMsg2.Visible = true;
                divMsg2.Attributes["class"] = "isa_success";
                lblMsg2.Text = "Contato salvo com sucesso!";
                mvClientes.ActiveViewIndex = 1;
                this.PopulaContatos(Convert.ToInt32(IDCliente.Value));

            }
            catch (Exception ex)
            {
                divMsg3.Visible = true;               
                if (ex.Message.IndexOf("duplicate") > -1)
                {
                    divMsg3.Attributes["class"] = "isa_warning";
                    lblMsg3.Text = "Contato já cadastrado no sistema.";
                }
                else
                {
                    divMsg3.Attributes["class"] = "isa_error";
                    lblMsg3.Text = ex.Message;
                }               
            }
        }

        protected void btnVoltarContato_Click(object sender, EventArgs e)
        {
            mvClientes.ActiveViewIndex = 1;
        }

        protected void btnIncContatos_Click(object sender, EventArgs e)
        {

        }

        protected void gvContatos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Editar"))
            {
                Int32 id = Convert.ToInt32(this.gvContatos.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);

                if (id != null)
                {
                    if (id > 0)
                    {
                        ContatoBO bo = new ContatoBO();
                        Model.Contato c = bo.load(id);
                        IDContato.Value = c.IDContato.ToString();
                        IDClienteContato.Value = c.IDCliente.ToString();
                        txtNomeContato.Text = c.Nome;
                        txtDepto.Text = c.Dpto;
                        txtEmail.Text = c.Email;
                        txtTel1.Text = c.Tel1;
                        txtTel2.Text = c.Tel2;
                        this.PopulaUsuarios();
                        ddlUsuario.SelectedValue = (c.IDUsuario == Int32.MinValue) ? "0" : c.IDUsuario.ToString();
                        mvClientes.ActiveViewIndex = 2;
                        lblTituloView3.Text = "Editar contato"; 
                        divMsg3.Visible = false;
                    }
                }
            }

            else if (e.CommandName.Equals("Excluir"))
            {
                if (System.Windows.Forms.MessageBox.Show("Tem certeza que deseja excluir?", "Excluir", MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) ==
                    System.Windows.Forms.DialogResult.OK)
                {
                    Int32 id = 0;
                    try
                    {
                        id = Convert.ToInt32(this.gvContatos.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    }
                    catch
                    {
                        return;
                    }
                    ContatoBO bo = new ContatoBO();
                    try
                    {
                        
                        bo.delete(id, Convert.ToInt32(Session["idUsuario"]));
                        PopulaContatos(Convert.ToInt32(IDCliente.Value));
                        divMsg2.Visible = true;
                        divMsg2.Attributes["class"] = "isa_success";
                        lblMsg2.Text = "Contato excluído com sucesso!";
                    }
                    catch (Exception ex)
                    {
                        divMsg2.Visible = true;
                        divMsg2.Attributes["class"] = "isa_error";
                        lblMsg2.Text = "Erro ao excluir contato: " + ex.Message;
                    }
                }
            }
        }

        protected void btnIncluirContato_Click(object sender, EventArgs e)
        {
            mvClientes.ActiveViewIndex = 2;
            this.LimparCamposView3();
            this.PopulaUsuarios();
            IDClienteContato.Value = IDCliente.Value;
        }

        protected void gvClientes_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void gvContatos_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}